/**
 * 格式化代码
 * @param code    代码
 * @return {string} 格式化后的代码
 */
export function formatJavaCode (code) {
  // 将代码按换行符分割成数组
  const lines = code.split('\n')
    .filter(item => {
      return item.trim() !== ''
    })
  let indentLevel = 0
  const formattedLines = []
  for (let i = 0; i < lines.length; i++) {
    // 去除每行前后的空格
    const trimmedLine = lines[i].trim()
    // 如果上一行的行尾是 )并且不是@ 或者 { ，
    // 注解@xxx()不换行  if() list.stream()换行
    // 或者当前行以 .开头
    // 则增加缩进级别
    if (i > 0) {
      const prevLine = lines[i - 1].trim()
      if ((prevLine.endsWith(')') && !prevLine.startsWith('@')) ||
        prevLine.endsWith('{') ||
        trimmedLine.startsWith('.')) {
        indentLevel++
      }
    }

    // 如果当前行以 ) 或者 } 开头，则减少缩进级别
    if (trimmedLine.startsWith(')') || trimmedLine.startsWith('}')) {
      indentLevel--
    }

    // 生成对应缩进的空格字符串（4 个空格）
    let indent = '    '.repeat(indentLevel)
    // 多行注释，多添加一个空格
    if (trimmedLine.startsWith('*')) {
      indent = ` ${ indent }`
    }
    // 如果当前行以 { 开头，增加缩进级别
    if (trimmedLine.startsWith('{')) {
      indentLevel++
    }
    if (trimmedLine.startsWith('/')) {
      formattedLines.push('')
    }
    // 添加缩进后的行到结果数组
    formattedLines.push(indent + trimmedLine)
  }

  // 在最后一个 import 语句后添加一个空行
  let lastImportIndex = -1
  for (let i = 0; i < formattedLines.length; i++) {
    if (formattedLines[i].trim().startsWith('import')) {
      lastImportIndex = i
    }
  }
  if (lastImportIndex !== -1 && lastImportIndex < formattedLines.length - 1) {
    formattedLines.splice(lastImportIndex + 1, 0, '')
  }
  if (formattedLines[0].startsWith('package ')) {
    formattedLines.splice(1, 0, '')
  }
  // 将格式化后的行重新组合成字符串
  return formattedLines.join('\n')
}

/**
 * 格式化xml代码
 * @param code    代码
 * @return {*}    格式化后的代码
 */
export function formatXmlCode (code) {
  code = code.replaceAll('&lt;', '<')
    .replaceAll('&#34;', '"')
    .replaceAll('&gt;', '>')
    .replaceAll('&#39;', '\'')
  const lines = code.split('\n')
    .filter(item => {
      return item.trim() !== ''
    })
  return lines.join('\n')
}
